#include "wxsanimationctrl.h"
#include "wx/animate.h"

#include <prep.h>

namespace {
  wxsRegisterItem<wxsAnimationCtrl> Reg( _T( "AnimationCtrl" ), _T( "动画框" ), wxsTWidget, _T( "标准" ), 370 );
  WXS_ST_BEGIN( wxsAnimationCtrlStyles, _T( "wxAC_DEFAULT_STYLE" ) )
  WXS_ST_CATEGORY( "wxAnimationCtrl" )
  WXS_ST( wxAC_DEFAULT_STYLE )
  WXS_ST( wxAC_NO_AUTORESIZE )
  WXS_ST_DEFAULTS()
  WXS_ST_END()
}

wxsAnimationCtrl::wxsAnimationCtrl( wxsItemResData* Data ):
  wxsWidget( Data, &Reg.Info, NULL, wxsAnimationCtrlStyles ), m_bPlay( false ) {}

void wxsAnimationCtrl::OnBuildCreatingCode() {
  switch( GetLanguage() ) {
  case wxsCPP: {
    AddHeader( _T( "<wx/animate.h>" ), GetInfo().ClassName, hfInPCH );
    wxString sAnimName = GetCoderContext()->GetUniqueName( _T( "anim" ) );
    Codef( _T( "\twxAnimation %s(%n);\n" ), sAnimName.wx_str(), m_sAnimation.wx_str() );
    Codef( _T( "%C(%W, %I, %s, %P, %S, %T, %N);\n" ), sAnimName.wx_str() );
    if( !m_bmpInactive.IsEmpty() ) {
      Codef( _T( "%ASetInactiveBitmap(%i);\n" ), &m_bmpInactive, _T( "wxART_OTHER" ) );
    }
    if( m_bPlay ) {
      Codef( _T( "%APlay();\n" ) );
    }
    BuildSetupWindowCode();
    return;
  }
  case wxsUnknownLanguage:
  default: {
    wxsCodeMarks::Unknown( _T( "wxsAnimationCtrl::OnBuildCreatingCode" ), GetLanguage() );
  }
  }
}

wxObject* wxsAnimationCtrl::OnBuildPreview( wxWindow* parent, long flags ) {
  wxAnimation anim;
  anim.LoadFile( m_sAnimation );
  wxAnimationCtrl* preview = new wxAnimationCtrl( parent, GetId(), anim, Pos( parent ), Size( parent ), Style() );
  if( !m_bmpInactive.IsEmpty() ) {
    preview->SetInactiveBitmap( m_bmpInactive.GetPreview( wxDefaultSize ) );
  }
  if( m_bPlay ) {
    preview->Play();
  }
  return SetupWindow( preview, flags );
}

void wxsAnimationCtrl::OnEnumWidgetProperties( M_Code_unused long flags ) {
  WXS_SHORT_STRING( wxsAnimationCtrl, m_sAnimation, _T( "Animation" ), _T( "animation" ), _T( "" ), false )
  WXS_BITMAP( wxsAnimationCtrl, m_bmpInactive, _T( "Inactive Bitmap" ), _T( "inactive_bitmap" ), _T( "wxART_OTHER" ) );
  WXS_BOOL( wxsAnimationCtrl, m_bPlay, _T( "Play" ), _T( "play" ), false )
}

